/**
 * 数字格式化工具函数
 */

/**
 * 格式化数字，添加千位符分割
 * @param num 要格式化的数字
 * @param decimals 小数位数，默认为2
 * @returns 格式化后的字符串
 */
export const formatNumber = (num: number, decimals: number = 2): string => {
  if (isNaN(num) || !isFinite(num)) {
    return '0';
  }
  
  // 先处理小数位
  const fixedNum = num.toFixed(decimals);
  
  // 分离整数部分和小数部分
  const [integerPart, decimalPart] = fixedNum.split('.');
  
  // 为整数部分添加千位符
  const formattedInteger = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  
  // 如果有小数部分，则拼接回去
  return decimalPart ? `${formattedInteger}.${decimalPart}` : formattedInteger;
};

/**
 * 格式化金额（万元）
 * @param amount 金额（元）
 * @param decimals 小数位数，默认为2
 * @returns 格式化后的金额字符串
 */
export const formatAmount = (amount: number, decimals: number = 2): string => {
  const wanAmount = amount / 10000;
  return `${formatNumber(wanAmount, decimals)}万`;
};

/**
 * 格式化百分比
 * @param value 数值
 * @param decimals 小数位数，默认为2
 * @param showSign 是否显示正负号，默认为true
 * @returns 格式化后的百分比字符串
 */
export const formatPercentage = (value: number, decimals: number = 2, showSign: boolean = true): string => {
  const sign = showSign && value > 0 ? '+' : '';
  return `${sign}${formatNumber(value, decimals)}%`;
};

/**
 * 格式化文件大小
 * @param bytes 字节数
 * @param decimals 小数位数，默认为1
 * @returns 格式化后的文件大小字符串
 */
export const formatFileSize = (bytes: number, decimals: number = 1): string => {
  if (bytes === 0) return '0 Bytes';
  
  const k = 1024;
  const dm = decimals < 0 ? 0 : decimals;
  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
  
  const i = Math.floor(Math.log(bytes) / Math.log(k));
  
  return `${formatNumber(parseFloat((bytes / Math.pow(k, i)).toFixed(dm)), dm)} ${sizes[i]}`;
};

/**
 * 格式化时间（秒）
 * @param seconds 秒数
 * @param decimals 小数位数，默认为2
 * @returns 格式化后的时间字符串
 */
export const formatTime = (seconds: number, decimals: number = 2): string => {
  return `${formatNumber(seconds, decimals)}s`;
}; 